البرمجة

القواميس في بايثون واستخداماتها

جدول المحتوى

الطرق البايثونية في استخدام قواميس بايثون ومتغيراتها وعاملها الثلاثي

في عالم البرمجة بلغة بايثون، تُعد القواميس (Dictionaries) واحدة من أكثر الهياكل البيانية شيوعًا وفعالية، خاصة عند التعامل مع بيانات تعتمد على علاقات زوجية بين المفاتيح والقيم. القاموس في بايثون هو بنية بيانات تُستخدم لتخزين البيانات بطريقة تعتمد على أزواج المفتاح والقيمة (key-value pairs). هذا المفهوم يجعله شبيهًا بالخرائط أو الجداول التي تمثل علاقات واضحة ومباشرة بين العناصر.

إلى جانب القواميس، نجد ما يُعرف بـ “الطرق البايثونية” (Pythonic Ways) في التعامل مع القواميس والمتغيرات، وهي طرق تعتمد على أفضل الممارسات وأبسطها وأكثرها وضوحًا وفقًا لروح لغة بايثون، والتي تشجع على الكود النظيف والمقروء. كما أن من بين الأدوات المهمة في هذا السياق “العامل الثلاثي” (Ternary Operator)، الذي يُستخدم كأداة فعالة لاتخاذ القرارات بسرعة داخل التعبيرات.

أولًا: مفهوم القاموس في بايثون

القاموس في بايثون هو نوع مدمج (Built-in Type) يُعرف بأنه غير مرتب (غير مرتب حتى النسخة 3.6 ثم أصبح مرتبًا لاحقًا)، قابل للتغيير (Mutable)، ويُستخدم لتخزين البيانات باستخدام مفاتيح غير مكررة.

يُكتب القاموس باستخدام الأقواس المعقوفة {}، ويتم تعريف كل عنصر فيه باستخدام الصيغة:

python
dictionary = {'key1': 'value1', 'key2': 'value2'}

خصائص القاموس:

  • كل مفتاح يجب أن يكون فريدًا وغير قابل للتغيير (Immutable)، مثل السلاسل النصية والأعداد والـ tuples.

  • القيم يمكن أن تكون من أي نوع.

  • يسمح بتعديل القيم، إضافة أو حذف عناصر بسهولة.

الطرق البايثونية في استخدام القواميس

1. إنشاء قاموس بطريقة مباشرة

python
person = {'name': 'Ali', 'age': 30, 'country': 'Egypt'}

2. استخدام الدالة dict() لبناء قاموس

python
data = dict(name='Fatima', age=25, city='Riyadh')

هذه الطريقة مفيدة عندما تكون المفاتيح عبارة عن سلاسل صالحة كأسماء متغيرات.

3. الوصول إلى القيم

python
print(person['name']) # Output: Ali

ولكن يجب الحذر من أن استخدام مفتاح غير موجود يُسبب خطأ KeyError.

4. استخدام .get() للوصول الآمن إلى القيم

python
age = person.get('age', 'Not Found')

هذه الطريقة أكثر أمانًا لأنها لا تُثير استثناء إذا لم يكن المفتاح موجودًا، بل تُرجع القيمة الافتراضية.

5. تعديل القيم

python
person['age'] = 35

6. إضافة عنصر جديد

python
person['job'] = 'Engineer'

7. حذف عنصر

python
del person['country']

8. استخدام الحلقات للتكرار على القاموس

python
for key, value in person.items(): print(f'{key}: {value}')

9. دمج قواميس

بايثون 3.9 قدم طريقة بايثونية جديدة لدمج قواميس:

python
merged = dict1 | dict2

أما قبل بايثون 3.9، فيمكن استخدام:

python
merged = {**dict1, **dict2}

10. استخدام Dictionary Comprehension

تُستخدم لفلاتر أو تعديل البيانات داخل القاموس بطريقة مختصرة:

python
squares = {x: x**2 for x in range(5)}

11. فلترة قاموس حسب شرط معين

python
filtered = {k: v for k, v in person.items() if isinstance(v, int)}

متغيرات القاموس وأهم الدوال

بايثون تزود القواميس بمجموعة غنية من الدوال والخصائص:

الدالة / الخاصية الوظيفة
dict.keys() تُرجع قائمة بالمفاتيح
dict.values() تُرجع قائمة بالقيم
dict.items() تُرجع أزواج المفتاح والقيمة
dict.pop(key) تحذف عنصرًا وترجع قيمته
dict.clear() تحذف جميع العناصر
dict.update() تُحدّث القاموس بعناصر من قاموس آخر
dict.copy() تُرجع نسخة من القاموس

التعامل مع القواميس المتداخلة

في كثير من الحالات، يكون من المفيد استخدام قواميس داخل قواميس:

python
students = { '001': {'name': 'Ahmed', 'age': 20}, '002': {'name': 'Salma', 'age': 22} }

يمكن الوصول للمعلومات باستخدام مؤشرات متداخلة:

python
print(students['001']['name']) # Ahmed

استخدام القاموس كمهيكل بيانات ديناميكي

بما أن القواميس قابلة للتغيير، يمكن استخدامها لبناء هياكل بيانات متغيرة حسب التفاعل مع المستخدم أو البرامج الأخرى:

python
inventory = {} while True: item = input("Item name: ") if item == "exit": break quantity = int(input("Quantity: ")) inventory[item] = inventory.get(item, 0) + quantity

العامل الثلاثي (Ternary Operator)

العامل الثلاثي في بايثون هو طريقة بايثونية مختصرة لكتابة الشروط داخل التعبيرات، ويُكتب بالشكل التالي:

python
value_if_true if condition else value_if_false

مثال تقليدي:

python
age = 18 status = 'Adult' if age >= 18 else 'Minor'

استخدام العامل الثلاثي داخل القاموس

يمكن استخدام العامل الثلاثي لإنشاء قاموس بناءً على شروط:

python
score = 75 result = {'status': 'Pass' if score >= 60 else 'Fail'}

دمجه مع Dictionary Comprehension

python
grades = {'Ali': 85, 'Noor': 58, 'Hassan': 76} status = {name: ('Pass' if score >= 60 else 'Fail') for name, score in grades.items()}

تطبيقات عملية متقدمة للقواميس والعامل الثلاثي

1. بناء قاموس من قائمتين

python
keys = ['a', 'b', 'c'] values = [1, 2, 3] result = dict(zip(keys, values))

2. عد تكرار الكلمات باستخدام قاموس

python
text = "python is simple and python is powerful" word_count = {} for word in text.split(): word_count[word] = word_count.get(word, 0) + 1

3. استخدام عامل ثلاثي لتحديد قيم حسب شروط

python
temperature = 30 status = 'Hot' if temperature > 25 else 'Cold'

4. استخدام القواميس لتطبيق منطق التبديل بدلًا من if-else المتكرر

python
def handle_case(x): return { 'a': 'Case A', 'b': 'Case B', 'c': 'Case C' }.get(x, 'Unknown Case') print(handle_case('b')) # Case B

جدول يوضح مقارنة بين الطرق البايثونية التقليدية والطرق المحسنة

العملية الطريقة التقليدية الطريقة البايثونية
شرط داخل متغير if cond: x = a else: x = b x = a if cond else b
فحص وجود مفتاح if key in d: ... d.get(key)
التكرار على المفاتيح والقيم for k in d: print(d[k]) for k, v in d.items(): ...
بناء قاموس من قائمتين استخدام for dict(zip(keys, values))
التحديث بقيم موجودة if key in d: d[key] += 1 d[key] = d.get(key, 0) + 1

الاستنتاج

الطرق البايثونية في استخدام القواميس والعامل الثلاثي تُعزز من كفاءة وسلاسة الكود البرمجي، مما يُتيح للمبرمجين بناء تطبيقات أكثر وضوحًا وقابلية للصيانة. اعتماد هذه الممارسات لا يُعد ترفًا، بل هو جزء من فلسفة بايثون نفسها، التي ترفع شعار “هناك طريقة واحدة واضحة لفعل الأشياء” (There should be one—and preferably only one—obvious way to do it). استخدام هذه الطرق يسهم بشكل مباشر في كتابة كود أكثر احترافية، أقل عرضة للأخطاء، وأكثر قدرة على التوسع والتعديل.

المراجع

  1. Python Documentation: https://docs.python.org/3/library/stdtypes.html#mapping-types-dict

  2. Python Enhancement Proposals (PEP 8): https://peps.python.org/pep-0008/